package pandora.box.usuario;

import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import MBcontrole.ValidadorParametro;
import persistence.HibernateUtil;
public class UsuarioDAOImp implements UsuarioDAO {
	private Session 		session 	= null;
	private Transaction 	transaction = null;
	
	public void setSessao(Session session){
		this.session = session;
	}

	@Override
	public boolean inserirusuario(Usuario usuario) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			String criptsenha = "";
			criptsenha = ValidadorParametro.CriptografiaSenha(usuario.getSenhausuario());
			usuario.setSenhausuario(criptsenha);
			usuario.setDtinclusao(new Date());
			usuario.setUsuarioinclusao("root"); // alterar para usuario LOGADO							
			System.out.println("Inserir Usuario: "+usuario.getLoginusuario());
			this.session.persist(usuario);
			this.transaction.commit();
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public boolean alterarusuario(Usuario usuario) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			System.out.println("Alterar Usuario: "+usuario.getEmailusuario());
			this.session.update(usuario);
			this.transaction.commit();
			retorno = true; 
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public boolean excluirusuario(Usuario usuario) {
		boolean retorno = false;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			//this.session.delete(this.session.get(Usuario.class, usuario.getIdusuario()));
			this.session.delete(this.session.get(Usuario.class, usuario.getNmusuario()));
			this.transaction.commit();
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return retorno;
	}

	@Override
	public Usuario listarusuario(Usuario usuario) {
		Usuario ue = null;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			//ue = (Usuario) this.session.get(Usuario.class, usuario.getIdusuario());
			ue = (Usuario) this.session.get(Usuario.class, usuario.getNmusuario());
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return ue;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> ListarTUsuario() {
		List<Usuario> list = null;
		try {
			this.session = HibernateUtil.getSessionFactory().openSession();
			list = this.session.createQuery("from USUARIO").list();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			this.session.close();
		}
		return list;
	}

}